/**
 * \file include.h
 * \brief Macros & Prototypes de quelques fonctions générales à tout le programme.
 *
 * Ce fichier contient quelques fonctions que l'on peut utiliser
 * partout, regroupées ici pour éviter une duplication du code.
 * Par exemple, pour trouver la taille d'un fichier.
 * Ceci est le fichier d'include qui contient les prototypes.
 * On y a également mis les macros du programme. 
 *
 */


#ifndef INCLUDE
#define INCLUDE

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include <dirent.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <arpa/inet.h>


//#define PORTMIN 20000 /*!< Numéro de port minimal pour le transfert*/
//#define PORTMAX 30000 /*!< Numéro de port maximal pour le transfert */
//#define QUEUE 5 /*!< Longueur de la file d'attente pour l'écoute */
//#define MAXBUFF 2000 /*!< Taille maximale du buffer d'envoi */
//#define NB_FICHIERS 2048 /*!< Nombre de fichiers dans la table de fichiers */
//#define REPERTOIRE_SHARED ".." /*!< Répertoire où sont situés les fichiers */
//#define REPERTOIRE_SRC ".." /*!< Répertoire où est situé le code */
//#define MD5_REPERTOIRE "../md5/" /*!< Répertoire où est situé le code de MD5 */
//#define TAILLE_MD5 16 /*!< Taille de la clé MD5 */
//#define NOM_FICHIER_TEMP "fichier_temporaire" /*!<Nom du fichier temporaire pour l'envoi */
//#define TAILLE_NOM_FICHIER 255 /*!<Longueur maximale du nom d'un fichier*/
#define MAX 512



void prompt();

/**
 * \brief Message d'erreur
 * 
 * Ecrit un message d'erreur.
 * \param msg Le message d'erreur
 * \return 0 et sort du programme.
 */
int error_msg(char * msg);

/**
 *
 * La fonction vide entièrement un tableau de caractères de taille n.
 * \param buffer Tableau de caractères
 * \param n Taille du tableau
 * \return void
 */
void vide_buffer(char buffer[], int n);


/**
 * \brief Récupère la taille d'un fichier par son descripteur.
 *
 * La fonction récupère la taille d'un fichier grâce au descripteur
 * de fichiers passé en paramètre.
 *
 * \param fd descripteur de fichier
 * \return la taille du fichier.
 */
int taille_fichier_fd(FILE * fd);

/**
 * \brief Récupère la taille d'un fichier par son nom.
 *
 * La fonction récupère la taille d'un fichier grâce à son nom passé
 * en paramètre.
 *
 * \param nom_fichier Nom du fichier
 * \return la taille du fichier.
 */

long taille_fichier(char * nom_fichier);

/**
 * \brief Récupère l'adresse ip locale de la machine.
 *
 * La fonction récupère l'adresse ip locale de la machine.
 *
 * \param
 * \return l'adresse ip de la machine.
 */
char* get_my_ip();



#endif
